<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
            promise三种状态 
            持续  pending
            成功  fulfilled
            失败  rejected

            promise2种转换
            持续  =>  成功 
            持续  =>  失败 
            ES6新增的一个内置构造函数 Promise
            new Promise(function(resolve,reject){
                // 需要两个参数
                
                // resolve是个函数 
                // 当这个调用  做一件事情  把promise的状态变成成功 
                // reject是个函数
                 // 当这个调用  做一件事情  把promise的状态变成失败

                写异步的事情
            })

            返回值: 
                一个实例对象

                对象身上有两个方法
                promise实例对象.then(函数)  
                如果 promise的状态变成了成功  then方法将会被触发  
                promise实例对象.catch(函数)
                如果 promise的状态变成了失败  catch方法将会被触发
        
        
        
        */

        // const p1 = new Promise(function(chenggong,shibai){
        //     const time = Math.random()*3000+2000;
        //     setTimeout(()=>{
        //         if(time<3500){
        //             console.log('开始给同学买东西');
        //             chenggong('我把消息传给then'); // 状态 由持续变成了成功
        //         }
        //         else{
        //             console.log('退钱给同学');
        //             shibai('我把消息传给catch'); // 状态由持续变成失败
        //         }

        //     },time)
        // })

        // p1.then(function(data){  // 用来接收chenggong传过来的消息
        //     console.log('龙飞东西买回来了,顺便说了一句话'+data);
        // })

        // p1.catch(function(err){  // 用来接收失败传过来的消息
        //     console.log('龙飞没有买到东西,顺便说了一句话'+err);
        // })

        // 支持链式调用 
        // p1.then(function(data){  // 用来接收chenggong传过来的消息
        //     console.log('龙飞东西买回来了,顺便说了一句话'+data);
        // })
        // .catch(function(err){  // 用来接收失败传过来的消息
        //     console.log('龙飞没有买到东西,顺便说了一句话'+err);
        // })


        // 如何解决的会掉地域 

        // 龙飞去买饭 
        // 买完饭之后  给鑫蕊带一瓶矿泉水 
        // 给鑫蕊买完水之后  给雪儿买雪糕 
        // 给雪儿买雪糕之后  给言雨买烟
        // 给言雨买完烟  给大个买汤达人泡面

        function longfei() {
            const p1 = new Promise(function (chenggong, shibai) {
                const time = Math.random() * 3000 + 2000;
                setTimeout(() => {
                    if (time < 3500) {
                        console.log('开始给同学买东西');
                        chenggong('我把消息传给then'); // 状态 由持续变成了成功
                    }
                    else {
                        console.log('退钱给同学');
                        shibai('我把消息传给catch'); // 状态由持续变成失败
                    }

                }, time)
            })

            return p1

        }

        longfei()
        .then(function(data){
            console.log('给鑫蕊买矿泉水');
            return longfei();
        })
        .then(function(data){
            console.log('给雪儿买雪糕');
            return longfei();
        })
        .then(function(data){
            console.log('给言雨买烟');
            return longfei();
        }) .then(function(data){
            console.log('给大个买泡面');
        }) 
        .catch(function(err){
            console.log('路上看到一个美女 忘记买东西了'+err);
        })

    </script>
</body>

</html>